﻿using GeneticAlgorithms.Genomes;

namespace GeneticAlgorithms.Operators.Mutation
{
    /// <summary>
    /// Base interface for mutation operators.
    /// </summary>
    /// <typeparam name="TGene">The type of the gene.</typeparam>
    public interface IGeneticMutator<TGene>
    {
        /// <summary>
        /// Gets or sets the mutation probability.
        /// </summary>
        /// <value>The mutation probability.</value>
        double MutationProbability { get; set; }

        /// <summary>
        /// Mutates the specified genome.
        /// </summary>
        /// <param name="genome">The genome.</param>
        void Mutate(IGenome<TGene> genome);
    }
}
